<?php
namespace Bundle\ModuleBundle\Interfaces;

interface ModuleManagerInterface extends \ArrayAccess
{
    /**
     * @abstract
     * @return void
     */
    public function load();

    /**
     * Установка пути поиска модулей.
     * @abstract
     * @param string|array $path
     * @return void
     */
    public function setModulesSearchPath($path);

    /**
     * Установка пути поиска плагинов.
     * @abstract
     * @param string|array $path
     * @return void
     */
    public function setPluginsSearchPath($path);

    /**
     * @abstract
     * @return array Список найденных плагинов
     */
    public function getPlugins();

    /**
     * Получение списка найденных модулей
     * @abstract
     * @return void
     */
    public function getModules();

    /**
     * Проверяет, есть ли данный модуль
     * @abstract
     * @param string $module
     * @return boolean
     */
    public function hasModule($module);

    /**
     * @abstract
     * @param string $module
     * @return ModuleInterface
     */
    public function getModule($module);

    /**
     * Проверяет, есть ли данный плагин
     * @abstract
     * @param string $plugin
     * @return boolean
     */
    public function hasPlugin($plugin);

    public function getPlugin($plugin);

    public function getModulesSearchPath();

    public function getEntityClassNameTemplate($moduleName);

}
